package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.INameVerifiedDAO;
import org.jsola.hr.dto.NameVerifiedAddDTO;
import org.jsola.hr.dto.NameVerifiedUpdateDTO;
import org.jsola.hr.entity.NameVerifiedDO;
import org.jsola.hr.query.NameVerifiedQuery;
import org.jsola.hr.vo.NameVerifiedListVO;
import org.jsola.hr.vo.NameVerifiedVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 实名认证
 *
 * @author zhr
 */
public interface INameVerifiedService extends IService<INameVerifiedDAO, NameVerifiedDO> {

    /**
     * 新增实名认证
     *
     * @param nameVerifiedAddDTO 新增实名认证DTO
     * @param tokenUser          当前用户
     * @return 实名认证详情信息
     */
    NameVerifiedVO save(NameVerifiedAddDTO nameVerifiedAddDTO, TokenUser tokenUser);

    /**
     * 新增实名认证
     *
     * @param nameVerifiedAddDTO 新增实名认证DTO
     * @param userId 员工userId
     * @param tokenUser          当前用户
     * @return 实名认证详情信息
     */
    NameVerifiedVO save(NameVerifiedAddDTO nameVerifiedAddDTO,String userId, TokenUser tokenUser);

    /**
     * 修改实名认证
     *
     * @param nameVerifiedUpdateDTO 修改实名认证DTO
     * @param tokenUser             当前用户
     * @return 更新数量
     */
    int update(NameVerifiedUpdateDTO nameVerifiedUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除实名认证，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser       当前用户
     * @param nameVerifiedIds 实名认证id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, Long... nameVerifiedIds);

    /**
     * 根据实名认证id查找
     *
     * @param nameVerifiedId 实名认证id
     * @param siteId         所属站点id
     * @return 实名认证详情信息
     */
    NameVerifiedVO selectById(Long nameVerifiedId, String siteId);

    /**
     * 查询实名认证
     *
     * @param nameVerifiedQuery 查询条件
     * @param siteId            所属站点id
     * @return 实名认证列表信息
     */
    List<NameVerifiedListVO> select(NameVerifiedQuery nameVerifiedQuery, String siteId);

    /**
     * 查询实名认证记录数
     *
     * @param nameVerifiedQuery 查询条件
     * @param siteId            所属站点id
     * @return 实名认证记录数
     */
    int selectCount(NameVerifiedQuery nameVerifiedQuery, String siteId);

    /**
     * 分页查询实名认证
     *
     * @param nameVerifiedQuery 查询条件
     * @param siteId            所属站点id
     * @return 实名认证列表信息
     */
    Page<NameVerifiedListVO> selectPage(NameVerifiedQuery nameVerifiedQuery, String siteId);


    /**
     * 根据实名认证id查找
     *
     * @param nameVerifiedId 实名认证id
     * @param siteId         所属站点id
     * @return 实名认证
     */
    NameVerifiedDO selectDOById(Long nameVerifiedId, String siteId);

    /**
     * 查询实名认证
     *
     * @param nameVerifiedQuery 查询条件
     * @param siteId            所属站点id
     * @return 实名认证列表
     */
    List<NameVerifiedDO> selectDO(NameVerifiedQuery nameVerifiedQuery, String siteId);

    /**
     * 用户是否已认证
     *
     * @param userId 用户id
     * @param siteId 站点id
     * @return true or false
     */
    Boolean isUserVerified(String userId, String siteId);


    /**
     * 查询用户认证信息
     *
     * @param userIds 用户ids
     * @param siteId  站点id
     * @return 用户认证信息
     */
    List<NameVerifiedDO> selectByUserIds(List<String> userIds, String siteId);
    //int upd(EmpInfoUpdateDTO empInfoUpdateDTO, TokenUser tokenUser);
}


